feat(sell): add storefront branding profile#663
Open
HananINouman wants to merge 7 commits into
Open
Conversation
Let operators set display name, tagline, and logo via `obol sell storefront` independent of ServiceOffers. Controller publishes /api/storefront.json; the public storefront consumes it for header, metadata, OG image, and favicon. Co-authored-by: Cursor <cursoragent@cursor.com>
Add a dedicated x402/obol-storefront-profile informer so controller republishes storefront.json on branding changes. Wrap fetchStorefront/ fetchServices in React.cache(), use ProfileNamespace for profile reads, and log marshal failures. Co-authored-by: Cursor <cursoragent@cursor.com>
Always show "Agent services" as the page title; use profile tagline in the hero and displayName in the custom header so seller name is not duplicated. Co-authored-by: Cursor <cursoragent@cursor.com>
Move displayName, tagline, and logoUrl into the public catalog, remove the separate storefront.json route, and configure branding via obol sell info. Co-authored-by: Cursor <cursoragent@cursor.com>
feat(sell): embed seller branding in /api/services.json envelope
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Operators can set seller-wide storefront branding with
obol sell info set, independent of individual ServiceOffers. The controller publishesdisplayName,tagline, andlogoUrlin the/api/services.jsoncatalog envelope, and the public storefront consumes that envelope for the header, hero copy, metadata, manifest icons, favicon behavior, and generated OG image.Summary
What changed:
/api/services.jsoncatalog envelope so the storefront has one catalog fetch for services plus seller profile data.obol sell infosupport for configuring seller branding without coupling it to any one ServiceOffer.Agent serviceswhile using the seller tagline for supporting copy./opengraph-imageby resolving them against the public request origin before passing them toImageResponse.gofmton the controller changes.Why it matters:
/api/storefront.jsonroute.Risk level: medium
The change touches CLI UX, controller-rendered public catalog data, and public storefront rendering/metadata. It should not alter x402 payment routing, settlement, pricing, or ServiceOffer route behavior.
Commit under test:
b734ca0aae5c0b2e75124956df6b3cf3bb7a5328Base branch:
mainHead branch:
feat/storefront-customizeScope
Validation
CI checks at the time this description was updated:
Local/unit checks:
Storefront build:
Notes:
npm cireported existing dependency audit findings: 1 moderate, 1 high.next buildpassed. It emitted a workspace-root warning because a higher-level/Users/bussyjd/yarn.lockexists in this local environment.Runtime spot check:
This validates the reviewed failure mode where
ImageResponsepreviously rejected relative custom logo paths withImage source must be an absolute URL.Integration tests:
Flow tests:
Release smoke:
Runtime / Security Notes
hostnames: ["obol.stack"].Live Chain Evidence
Not applicable. This PR does not register ERC-8004 identity, perform x402 purchases, or settle on-chain payments.
Review Notes
Known gaps:
npm ciare not introduced or fixed here./Users/bussyjd/.gitallowedsignersis not configured in this environment.Follow-ups:
StorefrontConfig/StorefrontSnapshotand an Obol-owned A2UI-style component catalog (Architecture proposal: customizable public storefront via A2UI-style surface contract #669).Reviewer focus:
obol sell info setas the canonical branding command./api/services.jsonis the right public compatibility boundary.